package reflect;

import java.lang.reflect.Method;

/**
 *  反射机制访问私有成员
 */
public class ReflectDemo6 {
    public static void main(String[] args) throws Exception {
        Person p = new Person();
//        p.heiheihei();//编译不通过,因为类的外部不可以方法类的私有成员

        Class cls = Class.forName("reflect.Person");
        Object obj = cls.newInstance();
        /*
            Class类中的方法:
            getMethod()和getMethods()
            用来获取其表示的类的公开方法(包含从超类继承的)

            getDeclaredMethod()和getDeclaredMethods()
            用来获取类本身自己定义的方法(包含私有方法,但是不包含从超类继承的)
         */
//        Method[] methods = cls.getMethods();
//        Method[] methods = cls.getDeclaredMethods();
//        for(Method method : methods){
//            System.out.println(method.getName());
//        }
        Method method = cls.getDeclaredMethod("heiheihei");
        method.setAccessible(true);//强行打开你的访问权限
        method.invoke(obj);
        method.setAccessible(false);//调用后尽量还原权限
    }
}
